(display "ex1-10")
(define (A x y)
    (cond   ((= y 0) 0)
            ((= x 0) (* 2 y))
            ((= y 1) 2)
            (else (A (- x 1)
                     (A x (- y 1))))))
               
(display (A 1 10))
(newline)
(display (A 2 4))
(newline)
(display (A 3 3))

(define (f n) (A 0 n))
;(A 0 n) 就是 x 为 0，值为 2y，即 f(n) = 2n

(define (g n) (A 1 n))
;(A 1 n) 就是 x 为 1
(A 1 n)
(A 0 (A 1 (- n 1)))
(* 2 (A 1 (- n 1)))
(* 2 (A 0 (A (- (- n 1) 1))) = (* 2 (A 0 (A 1 (- n 2))
(* 2 (* 2 (A 0 (A 1 (- n 3)))
(* 2 (* 2 (* 2 (A 0 (A 1 (- n 4))))
......
(* 2 (* 2 (* 2 ...... (* 2 (A 0 (A 1 (- n (- n 1)))))))) = (* 2 (* 2 (* 2 ...... (* 2 (A 0 (A 1 1))))))
(* 2 (* 2 (* 2 ...... (* 2 (A 0 2)))))
(* 2 (* 2 (* 2 ...... (* 2 (* 2 2)))))
;由上面分析可知：
;当 n = 0 时，有 0 个 2 相乘
;当 n = 1 时，有 1 个 2 相乘
;当 n = 2 时，有 2 个 2 相乘
;当 n = k 时，有 k 个 2 相乘
;所以 g(n) = 2^n

(define (h n) (A 2 n))
当 n = 0 时，h(n) = 0
当 n = 1 时，h(n) = 2 = 2
(A 2 2)
(A 1 (A 2 1))
(A 1 2)
(A 0 (A 1 1))
(A 0 2)
(* 2 2)
4
当 n = 2 时，h(n) = 4 = 2^2
(A 2 3)
(A 1 (A 2 2))
(A 1 (A 1 (A 2 1)))
(A 1 (A 1 2))
(A 1 (A 0 (A 1 1)))
(A 1 (A 0 2))
(A 1 (* 2 2))
(A 1 4)
(A 0 (A 1 3))
(A 0 (A 0 (A 1 2)))
(A 0 (A 0 (A 0 (A 1 1))))
(A 0 (A 0 (A 0 2)))
(A 0 (A 0 (* 2 2)))
(A 0 (A 0 4))
(A 0 8)
16
当 n = 3 时，h(n) = 16 = 2^2^2
当 n = 4 时，h(n) = 65536 = 2^2^2^2
所以 h(n) = 2^2^...^2^2(共 n 个)
